SET QUOTED_IDENTIFIER ON
GO
SET ANSI_NULLS ON
GO
CREATE Procedure [dbo].[SP_TCMOVI_BANC_D04]
/*-------------------------------------------------------*/      
/*---Empresa              : OFISIS S.A.                --*/      
/*---Cliente              : OFISIS                 --*/      
/*---Sistema              : Tesoreria                  --*/      
/*---Mödulo               : Empresa                    --*/      
/*---Programa             : Anulaci÷n (Todo Comprobante--*/      
/*---                       Movimiento Bancos          --*/      
/*---                       (Egresos)                  --*/        
/*---Script               : tcmovi_b.sql               --*/      
/*---Nombre SP            : SP_TCMOVI_BANC_D04         --*/      
/*---Desarrollado por     : Javier Flores A.           --*/      
/*---Fecha Creaciön       : 04/07/1999                 --*/      
/*---Base Datos           : Microsoft Sql Server       --*/      
/*---Versiön              : 7.0                        --*/      
/*---Invoca a SP          :                            --*/      
/*-------------------------------------------------------*/      
/*-------------------------------------------------------*/      
/*---Modificado 1 por     : Reynaldo Menacho           --*/      
/*---Fecha Modificaciön   : 22/04/2005                 --*/       
/*---Detalle Modificaciön : Busqueda del estado actual o anterior    --*/      
/*---      de los documentos             --*/     
/*-------------------------------------------------------*/      
/*-------------------------------------------------------*/      
/*---ModIficado 2 por     :Maribel Julca Rodriguez     --*/      
/*---Fecha ModIficaci,n   :22/01/2005                  --*/       
/*---Detalle ModIficaci,n :ingreso de campos CO_USUA_CREA, CO_USUA_MODI --*/      
/*-------------------------------------------------------*/      
/*---------------------------------------------------------*/  
/*---Modificado 3 por     : Carlos Marquez Escobar       --*/  
/*---Fecha Modificaci÷n   : 24/10/2005                   --*/  
/*---Detalle Modificaci÷n : Manejo de Extornos    --*/  
/*---------------------------------------------------------*/  
/*---------------------------------------------------------*/  
/*---Modificado 4 por     : Carlos Marquez Escobar       --*/  
/*---Fecha Modificaci÷n   : 10/03/2010                   --*/  
/*---Detalle Modificaci÷n : Logica de Periodo EXTORNO	 --*/  
/*---------------------------------------------------------*/  
/*-------------------------------------------------------*/      
/*---Comentarios                                       --*/      
/*---                                                  --*/      
/*---                                                  --*/      
/*-------------------------------------------------------*/      
/*-------------------------------------------------------*/      
/*---Drop Proc SP_TCMOVI_BANC_D04                      --*/      
/*---Grant all on SP_TCMOVI_BANC_D04 to public         --*/       
/*---SP_TCMOVI_BANC_D04                                --*/      
/*-------------------------------------------------------*/      
 @ISCO_EMPR TD_VC_002,       
 @ISCO_USUA_MODI TD_VC_008_USUA,      
 @ISCO_BANC TD_VC_003,       
 @ISNU_CNTA_BANC TD_VC_020,      
 @ISAA_BNCO TD_VC_004,       
 @ISMM_BNCO TD_VC_002,       
 @ISTI_MOVI_BANC TD_VC_001,        
 @ISNU_COMP_BANC TD_VC_008,       
 @INIM_MOVI TD_NU_016_004,      
 @ISCO_TIPO_OPER TD_VC_003,      
 @IDFE_ANUL TD_DT_001,      
 @ISDE_OBSE TD_VC_100,      
 @ISNU_SOLI TD_VC_010,
 @ISCO_UNID_CNTB TD_VC_003
 as      
        
 Declare           
 @VNIM_MOVI_ANTE TD_NU_016_004, @OSTI_DOCU TD_VC_003, @CSTI_DOCU_ENTI TD_VC_003,       
 @CSNU_DOCU_ENTI TD_VC_020, @CNNU_SECU_PRPA TD_IN_001, @CNIM_CONV_DOCU TD_NU_016_004,       
 @VSST_SIGN TD_VC_001, @CNIM_DETA TD_NU_016_004, @CSTI_ENTI TD_VC_001,      
 @CSCO_ENTI TD_VC_020, @VSCO_TIPO_EGAN TD_VC_003, @VSST_GEAS_ANUL TD_VC_001,      
 @VSCO_TIPO_OPE1 TD_VC_003, @OSTI_DOCU_RETE TD_VC_003, @CSCO_CNTA_EMPR TD_VC_010,      
 @VSST_APRO_CXPA TD_VC_001, @CSST_CIER_DOCU TD_VC_001, @VSCO_ESTA_ANTE TD_VC_003,    
 @VNIM_CONV_DOCU TD_NU_016_004,  
  
 /* a) Variables de extorno */  
 @VSCO_UNID_CONC TD_VC_003,  
 @VDFE_OPER  TD_DT_001,  
 @OSNU_ASTO  TD_VC_010,  
 @VSCO_TIPO_INAN TD_VC_003,  
 @VSST_INTE_BACH TD_VC_001,  
 @VSST_ASTO_RESU TD_VC_001,  
 @VSTI_OPNI_CARG TD_VC_001,  
 @VSTI_OPNI_ABON TD_VC_001  
  
      
Begin Tran SP_TCMOVI_BANC_D04      
  
 /* Devuelve el Tipo Documento */      
 Exec SP_TTDOCU_CNTB_Q01 21, @OSTI_DOCU_RETE OUTPUT      
 Exec SP_TTDOCU_CNTB_Q01 6, @OSTI_DOCU OUTPUT       
  
 /**-----Verifica si es interface en Linea s/n y Estatus de Programaci½n de Pagos ------*/   
 SELECT @VSCO_TIPO_INAN = CO_TIPO_OPER, @VSST_GEAS_ANUL = ST_GEAS_ANUL,  
   @VSST_INTE_BACH = ST_INTE_BACH,    
   @VSTI_OPNI_CARG = CO_TIPO_OPEG, @VSTI_OPNI_ABON = CO_TIPO_OPER, @VSST_APRO_CXPA = ST_APRO_CXPA,  
   @VSCO_TIPO_EGAN = CO_TIPO_OPEG, @VSST_GEAS_ANUL = ST_GEAS_ANUL  
 FROM   TMPARA_TESO       
 WHERE  CO_EMPR = @ISCO_EMPR      
  
  
 Select @VDFE_OPER = FE_OPER,  
   @VSCO_UNID_CONC = CO_UNID_CONC  
 From   TCMOVI_BANC      
 Where  CO_EMPR = @ISCO_EMPR      
 And    CO_UNID_CONC = @ISCO_UNID_CNTB
 And    CO_BANC = @ISCO_BANC      
 And    NU_CNTA_BANC = @ISNU_CNTA_BANC      
 And    AA_BNCO = @ISAA_BNCO      
 And    MM_BNCO = @ISMM_BNCO      
 And    TI_MOVI_BANC = @ISTI_MOVI_BANC      
 And    NU_COMP_BANC = @ISNU_COMP_BANC                
  
      
 Declare CU_TCMOVI_BANC_D04_1 Cursor      
 For      
 Select TI_ENTI, CO_ENTI, TI_DOCU_ENTI, NU_DOCU_ENTI, IM_CONV_DOCU, IM_DETA,     
 RTRIM(ISNULL(CO_CNTA_EMPR, '')), NU_SECU_PRPA, ST_CIER_DOCU    
 From   TDMOVI_BANC      
 Where  CO_EMPR = @ISCO_EMPR      
 And    CO_UNID_CONC = @ISCO_UNID_CNTB
 And    CO_BANC = @ISCO_BANC      
 And    NU_CNTA_BANC = @ISNU_CNTA_BANC      
 And    AA_BNCO = @ISAA_BNCO      
 And    MM_BNCO = @ISMM_BNCO      
 And    TI_MOVI_BANC = @ISTI_MOVI_BANC      
 And    NU_COMP_BANC = @ISNU_COMP_BANC                
   
 Open CU_TCMOVI_BANC_D04_1      
 Fetch CU_TCMOVI_BANC_D04_1 into @CSTI_ENTI, @CSCO_ENTI, @CSTI_DOCU_ENTI, @CSNU_DOCU_ENTI, @CNIM_CONV_DOCU,       
 @CNIM_DETA, @CSCO_CNTA_EMPR, @CNNU_SECU_PRPA, @CSST_CIER_DOCU    
   
 While (@@FETCH_STATUS = 0)      
 Begin      
  If (@@FETCH_STATUS < 0)      
  Begin      
   RAISERROR 20001 'FIN DE ARCHIVO'      
   Close CU_TCMOVI_BANC_D04_1      
   Deallocate CU_TCMOVI_BANC_D04_1      
   Rollback Tran SP_TCMOVI_BANC_D04      
   Return      
  End      
    
   
  If @CSCO_CNTA_EMPR = ''    
  Begin    
   -- Seteo de variable para el procedure que actualiza el documento    
   Select @VNIM_CONV_DOCU = @CNIM_CONV_DOCU * -1    
     
   -- Se busca el estado anterior del documento    
   Exec SP_TTESTA_ORIG_Q01 @ISCO_EMPR, @CSTI_ENTI, @CSCO_ENTI, @CSTI_DOCU_ENTI, @CSNU_DOCU_ENTI, @VSCO_ESTA_ANTE output    
     
   If @CSTI_ENTI = 'P' And @CSTI_DOCU_ENTI = @OSTI_DOCU_RETE    
   Begin    
    Update TMDOCU_PROV     
    Set IM_PAGA = Isnull(IM_PAGA,0) - Round(@CNIM_CONV_DOCU,2), CO_ESTA_DOCU = 'ANU',    
    FE_USUA_MODI = Getdate(), CO_USUA_MODI = @ISCO_USUA_MODI    
    Where CO_EMPR = @ISCO_EMPR     
    And   CO_PROV = @CSCO_ENTI     
    And   CO_TIPO_DOCU = @CSTI_DOCU_ENTI     
    And   NU_DOCU_PROV = @CSNU_DOCU_ENTI    
     
    If @@error <> 0    
    Begin     
     Close CU_TCMOVI_BANC_D04_1    
     Deallocate CU_TCMOVI_BANC_D04_1    
     Rollback Tran SP_TCMOVI_BANC_D04    
     Return      
    End    
   
    Update TCCOMP_RETE    
    Set TI_SITU = 'ANU',    
    FE_USUA_MODI = Getdate(), CO_USUA_MODI = @ISCO_USUA_MODI    
    Where CO_EMPR = @ISCO_EMPR     
    And   NU_COMP_RETE = @CSNU_DOCU_ENTI    
      
    If @@error <> 0    
    Begin     
     Close CU_TCMOVI_BANC_D04_1    
     Deallocate CU_TCMOVI_BANC_D04_1    
     Rollback Tran SP_TCMOVI_BANC_D04    
     Return      
    End    
   End    
   Else    
   Begin    
    --Se actualiza el documento y se graba en tabla de kardex de estados de documentos    
    Exec SP_TTACTU_PAGO_Q01 @ISCO_EMPR, @CSTI_ENTI, @CSCO_ENTI, @CSTI_DOCU_ENTI, @CSNU_DOCU_ENTI,     
    @VNIM_CONV_DOCU, @VSCO_ESTA_ANTE, @ISCO_USUA_MODI, @CSST_CIER_DOCU    
    If @@error <> 0    
    Begin     
     Close CU_TCMOVI_BANC_D04_1    
     Deallocate CU_TCMOVI_BANC_D04_1    
     Rollback Tran SP_TCMOVI_BANC_D04    
     Return      
    End    
    
   End    
   
  End      
   
  Fetch CU_TCMOVI_BANC_D04_1 into @CSTI_ENTI, @CSCO_ENTI, @CSTI_DOCU_ENTI, @CSNU_DOCU_ENTI, @CNIM_CONV_DOCU,       
  @CNIM_DETA, @CSCO_CNTA_EMPR, @CNNU_SECU_PRPA, @CSST_CIER_DOCU    
    
 End      
   
 Close CU_TCMOVI_BANC_D04_1      
 Deallocate CU_TCMOVI_BANC_D04_1      
   
   
 If @VSST_GEAS_ANUL = 'N'      
  Select @VSCO_TIPO_OPE1 = @VSCO_TIPO_EGAN      
 Else          
  Select @VSCO_TIPO_OPE1 = @ISCO_TIPO_OPER      
  
 -- Si la Fecha de Anulacion es Mayor --E X T O R N O--  --  
 -- If  @VDFE_OPER < @IDFE_ANUL And Month( @VDFE_OPER ) != Month( @IDFE_ANUL ) -- Logica EXTORNO sustituida 
 If  (Year(@VDFE_OPER) * 100 + Month(@VDFE_OPER)) < (Year(@IDFE_ANUL) * 100 + Month(@IDFE_ANUL)) 
  
  Update  TCMOVI_BANC      
  Set     TI_SITU = 'EXT',       
    DE_OBSE = @ISDE_OBSE,      
    CO_TIPO_OPER = @VSCO_TIPO_OPE1,      
    CO_USUA_MODI = @ISCO_USUA_MODI,      
    FE_USUA_MODI = GETDATE()      
  Where   CO_EMPR = @ISCO_EMPR        
  And     CO_UNID_CONC = @ISCO_UNID_CNTB
  And     CO_BANC = @ISCO_BANC      
  And     NU_CNTA_BANC = @ISNU_CNTA_BANC       
  And     AA_BNCO = @ISAA_BNCO      
  And     MM_BNCO = @ISMM_BNCO      
  And     TI_MOVI_BANC = @ISTI_MOVI_BANC       
  And     NU_COMP_BANC = @ISNU_COMP_BANC    
 Else
  Update  TCMOVI_BANC      
  Set     TI_SITU = 'ANU',       
    DE_OBSE = @ISDE_OBSE,      
    CO_TIPO_OPER = @VSCO_TIPO_OPE1,      
    CO_USUA_MODI = @ISCO_USUA_MODI,      
    FE_USUA_MODI = GETDATE()      
  Where   CO_EMPR = @ISCO_EMPR        
  And     CO_UNID_CONC = @ISCO_UNID_CNTB
  And     CO_BANC = @ISCO_BANC      
  And     NU_CNTA_BANC = @ISNU_CNTA_BANC       
  And     AA_BNCO = @ISAA_BNCO      
  And     MM_BNCO = @ISMM_BNCO      
  And     TI_MOVI_BANC = @ISTI_MOVI_BANC       
  And     NU_COMP_BANC = @ISNU_COMP_BANC    
   
 If @@error <> 0      
 Begin      
  Rollback Tran SP_TCMOVI_BANC_D04      
  Return      
 End      
   
 /**-----Verifica si se genera asientos Resumidos ------*/   
 Select @VSST_ASTO_RESU = Max(IsNull( t1.ST_ASTO_RESU, 'S'))        
 From   TMOPRC_RESU t1 , TDTIPO_OPER t2        
 Where  t2.CO_EMPR = @ISCO_EMPR And        
 t2.CO_TIPO_OPER = @ISCO_TIPO_OPER And        
 t1.CO_EMPR = t2.CO_EMPR And        
 t1.CO_OPRC_CNTB = t2.CO_OPRC_CNTB     
  
  /**-----Fin de la Validacion de Asientos Resumidos e Interfase en Bach ------*/   
  If @VSST_INTE_BACH = 'N' AND @VSST_ASTO_RESU = 'N' AND   
	  @ISCO_TIPO_OPER != @VSTI_OPNI_CARG AND @ISCO_TIPO_OPER != @VSTI_OPNI_ABON And  
	  (Year(@VDFE_OPER) * 100 + Month(@VDFE_OPER)) < (Year(@IDFE_ANUL) * 100 + Month(@IDFE_ANUL))  -- Logica EXTORNO Cambiada 
 Begin  
     
  /*-----Optiene el Numero de Asiento -----*/      
  EXEC SP_TTULTI_ASTO_Q01 @ISCO_EMPR, @ISCO_USUA_MODI, @VSCO_UNID_CONC, @VSCO_TIPO_OPE1, @IDFE_ANUL, @OSNU_ASTO OUTPUT    
  IF (@@ERROR != 0)        
  Begin    
   RollBack Tran  SP_TTAMAR_NCCA_D01  
   Return    
  End    
  
 End    
   
 Insert into TTBANC_ANUL (CO_EMPR, CO_BANC, NU_CNTA_BANC, AA_BNCO, MM_BNCO, TI_MOVI_BANC, NU_COMP_BANC,       
 CO_TIPO_OPER, FE_ANUL, NU_ASTO, ST_CONT, CO_USUA_CREA, FE_USUA_CREA, CO_USUA_MODI, FE_USUA_MODI, CO_UNID_CONC)
 Values (@ISCO_EMPR, @ISCO_BANC, @ISNU_CNTA_BANC, @ISAA_BNCO, @ISMM_BNCO, @ISTI_MOVI_BANC, @ISNU_COMP_BANC,       
 @VSCO_TIPO_OPE1,  @IDFE_ANUL, @OSNU_ASTO, 'N', @ISCO_USUA_MODI, GETDATE(), @ISCO_USUA_MODI, GETDATE(), @ISCO_UNID_CNTB)    
  
   
 If @@error <> 0      
 Begin      
  Rollback Tran SP_TCMOVI_BANC_D04      
  Return      
 End      
   
   
 /* Actualizando la Tabla de Solicitudes a Caja a Situaci©n APROBADAS */      
   
 Update TMSOLI_CABA       
 Set TI_SITU = 'APR', FE_LIQU = NULL,       
 CO_USUA_MODI = @ISCO_USUA_MODI, FE_USUA_MODI = getdate()               
 Where CO_EMPR = @ISCO_EMPR      
 And   NU_SOLI = @ISNU_SOLI      
   
 If @@error <> 0      
 Begin      
  Rollback Tran SP_TCMOVI_BANC_D04      
  Return      
 End      
      
commit Tran SP_TCMOVI_BANC_D04  
/*------------------------ Fin ------------------------------*/

GO
